//给定两个字符串 s 和 t ，判断它们是否是同构的。
//
// 如果 s 中的字符可以按某种映射关系替换得到 t ，那么这两个字符串是同构的。
//
// 每个出现的字符都应当映射到另一个字符，同时不改变字符的顺序。不同字符不能映射到同一个字符上，相同字符只能映射到同一个字符上，字符可以映射到自己本身。
//
//
//
// 示例 1:
//
//
//输入：s = "egg", t = "add"
//输出：true
//
//
// 示例 2：
//
//
//输入：s = "foo", t = "bar"
//输出：false
//
// 示例 3：
//
//
//输入：s = "paper", t = "title"
//输出：true
//
//
//
// 提示：
//
//
//
//
//
// 1 <= s.length <= 5 * 10⁴
// t.length == s.length
// s 和 t 由任意有效的 ASCII 字符组成
//
//
// Related Topics 哈希表 字符串 👍 582 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function isIsomorphic(s: string, t: string): boolean {

    // let map : Map<string, string> = new Map<string, string>()
    // let map2 : Map<string, string> = new Map<string, string>()
    // for (let i = 0; i < s.length; i ++) {
    //     if (map.get(s.charAt(i)) === undefined && map2.get(t.charAt(i)) === undefined) {
    //         map.set(s.charAt(i), t.charAt(i))
    //         map2.set(t.charAt(i), s.charAt(i))
    //     }
    //     // 此时说明s中出现重复字符了 那么此时t中也应该是重复字符
    //     else if (map.get(s.charAt(i)) !== t.charAt(i) || map.get(t.charAt(i)) !== s.charAt(i)) {
    //         // if (map.get(s.charAt(i)) !== t.charAt(i)) return false
    //         // if (map.get(t.charAt(i)) !== s.charAt(i)) return false
    //         return false
    //     }
    // }
    // return true
    const helperMap1: Map<string, string> = new Map();
    const helperMap2: Map<string, string> = new Map();
    for (let i = 0, length = s.length; i < length; i++) {
        let temp1: string | undefined = helperMap1.get(s[i]);
        let temp2: string | undefined = helperMap2.get(t[i]);
        if (temp1 === undefined && temp2 === undefined) {
            helperMap1.set(s[i], t[i]);
            helperMap2.set(t[i], s[i]);
        } else if (temp1 !== t[i] || temp2 !== s[i]) {
            return false;
        }
    }
    return true;
};
//leetcode submit region end(Prohibit modification and deletion)
